下方程式碼片段全部都是擷取自 Secure Code Warrior 線上安全程式培訓平台,因為練習互動時的題目多半不會只有單一個檔案,可能涉及多個檔案、資料夾及多處地方修改,因此我的文章主要是針對最主要的區塊做修改及說明,若有不好理解的地方非常抱歉也還請見諒,也可以實際上去 Secure Code Warrior 玩玩看,搭配著互動,會更有感的學習哦~
String userName = textBox1.Text;
String password = textBox2.Text;
Regex testPassword = new Regex(userName);
Match match = testPassword.Match(password);
if (match.Success){
MessageBox.Show("Bad password!");
}
使用者使用一個對規則表達式有害的帳戶名稱作為帳戶
^(([a-z]) +.)+[A-Z]([a-z])+$
這個輸入有很多重複分組[a-z]彼此互相包含在其中,這增加了REGEX引擎考慮的組合數量,這時攻擊者如果再輸入一個與規則表達式不匹配的長字串作為密碼,因其長度較長將增加REGEX引擎檢查的時間,導致應用程式回應變慢
(a+)+
([a-zA-Z]+)*
(alaa) +
(ala?) +
regex b("([a-zA-Z0-9_]+)+");
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
規則表達式用於輸入驗證,旨在確保只包含字母、數字字元和下劃線。 然而,這種規則表達式容易受到拒絕服務(DoS)攻擊,因為它有可能造成過度回溯,導致系統嚴重減速,甚至完全停止系統。
把原區塊改成
regex b("^[A-Za-z0-9]\\w+");
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
為了安全的輸入驗證,使用了規則表達式 ^[A-Za-z0-9]\\w+
。 這種模式有效地確保字串以字母、數字字元開頭,後跟一個或多個字母、數字字元或下劃線。 與容易過度回溯的模式不同,不受拒絕服務(DoS)攻擊的影響,從而保持系統效能和穩定性。